In multimedia broadcast over a computer network, such as the Internet, the number of users that may simultaneously receive a data stream (e.g., a media stream) broadcast over the network is typically limited by the available bandwidth of the broadcasting server and the recipient clients. In this context, the media data stream is a digitized form of video, audio, or other multimedia that may be broadcast over the network and presented to a user. In general, the broadcasting server communicates with one or more clients in the network according to a client/server model of information delivery. In this model, the client may comprise an application, such as a conventional web browser, executing on a computer that “connects” to the server over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. Each client may request a data stream from the server by issuing messages, usually in the form of packets, to the server.
The server is a computer that provides a requested media data stream to one or more clients. The media data stream may be stored in a data storage medium, such as a magnetic disk, attached to the server. In this case, the server may be a file server (“filer”) configured to provide file service relating to the information stored in its attached storage devices. Alternatively, rather than storing the data stream in a form of mass storage medium attached to the server, the data stream may reside in the server's memory or buffer cache. Thus, the server may be configured as a “network cache” that provides clients access to media data streams stored in its “in-core” memory, i.e., random-access memory (RAM). For instance, the server may be a NetCache® device made by Network Appliance, Inc. of Sunnyvale, Calif., a proprietary application that manages file access requests for information stored in a computer's in-core memory.
Providing streaming media to clients, whether live or on demand, may be resource intensive, where efficient utilization of CPU of the network cache is often required. When a server receives a request for streaming media from a client (e.g., a request to play an audio file), the server needs to access the data packets of the requested data and send the packet to the requesting client in such a manner that the data stream provided to the client is of a particular quality and smoothness. In order to achieve this the server may include a packet pacing sub-system that is responsible for determining the rate and order at which the packets of the requested data stream are transmitted to the client. In some existing systems, the packet pacing sub-system is configured to 1) wait until it receives at least one data packet, 2) filter the data packet, 3) wait for the time when a copy of the data packet should be transmitted to the requesting client and, and finally 4) send the data packet to a component responsible for communication with the network (e.g., a network protocol engine). Utilizing such approach may result in three suspension/resume points per data packet per cycle: at operations 1, 3, and 4. This approach also requires a context switch, e.g., from an application context to a network context. Each suspension and resume operation, as well as each context switch, consumes CPU resources and results in a less efficient delivery of the requested data stream to the client. It is desirable for the server to transmit client-requested data packets without excessive consumption of its own resources, such as its central processing unit (CPU) bandwidth in order to improve system performance.